#!/bin/bash
########################
# - 备份文件，带时间戳   #
########################
mybak_file(){
# 说明：备份一个文件，并在文件开头加上bak和文件末尾加上时间戳 "%s" , date -d @xxxxxxxxxx 得到可视化时间
# 举例：`mybak file`  输出： bak.file.xxxxxxxxxxxx
  cp -av "${1:-文件不存在}" "bak.${1}.$(date +%s)"
}
######################
# - 判断是否为浮点数  #
######################
myis_float(){
  local num="$1"

  # - 多个参数，则报错
  if [[ -n "$2" ]]
  then
    echo 'error: too many arguments 参数过多'
    return 2
  fi 
  
  # - 不给参数，报错
  if [[ -z "$1" ]]
  then
    echo 'error: no argument 没有参数'
    return 10
  fi

  # - 判断是否为浮点数，包括整数和正负号  
  if [[ $num =~ ^[+-]?[0-9]+\.?[0-9]*$ ]] 
  then
    return 0
  else
    return 1
  fi
}
####################
# - 输出cpu使用率   #
####################
mycpu_use(){
  mycpu_id="$(top -bn1 |grep -o -P '[.0-9\s]+(?=id)')"
  echo "100 - ${mycpu_id:-101}" | bc
}
###################################################
# - 输出负载，可指定参数查看1分钟5分钟和10分钟的负载  #
###################################################
myload(){
  local num="$1"
  myarr=($(cat /proc/loadavg))
  # - 无参数返回
  if [[ -z "$1" ]]
  then
    echo "${myarr[@]:0:3}"
    return 0
  fi

  # - 多参数报错
  if [[ -n "$2" ]]
  then
    echo 'error: too many arguments 参数过多'
    return 2
  fi

  # - 正常参数
  case "${num:-error}" in
    "1")
      echo "${myarr[0]}"
      return 0
      ;;
    "5")
      echo "${myarr[1]}"
      return 0
      ;;
    "10")
      echo "${myarr[2]}"
      return 0
      ;;
    *)
      # - 未知参数报错
      echo "不识别的选项${num}"
      return 1
      ;;
  esac
}

